<?php
/**
 * Pacote inicial do objeto CRUD
 *
 * @author William Borba <webwilliams@gmail.com>
 * @version 0.2.1
 * @copyright opensource.
 * @license http://creativecommons.org/licenses/by/3.0/
 * @link http://code.google.com/p/comphp/
 * @category framework
 * @package CRUD
 * @subpackage objRotinaCrud
 *
 *
 */
namespace bibliotecas\componentes\crud
	{
		/**
		 * inclui namespaces da classe objFuncoesDados
		 *
		 * @see objFuncoesDados
		 *
		 */
		use bibliotecas\componentes\crud\funcoes\objFuncoesDados as objFuncoesDados;
		/**
		 * inicia a classe objRotinaCrud, herdando metodos e propriedades da classe objFuncoesDados
		 *
		 * @see objNavegacao
		 * @access public
		 *
		 */
		class objCrud extends objFuncoesDados
			{
				/**
				 * propriedade que contera os dados iniciais de entrada
				 * EX: array('proDadosCRUD' => array(
				 * 'parCampos' => array('campo1' => 'valor'),
				 * 'parDescartar' => array('campo1' => 'valor'),
				 * 'parObrigatorios' => array('campo1' => 'valor'),
				 * 'parAdicionais' => array(
				 * 'campo1' => 'id',
				 * 'campo2' => 'unico',
				 * 'campo3' => array('criptografar' => 'md5 ou sha1'),
				 * 'campo4' => array('codRandomico' => '2 a 10')),
				 * 'parFiltro' => 'like ou normal',
				 * 'parTipo' => 'like ou normal',
				 * 'parLimite' => '[0-9]',
				 * 'parOrdem' => 'desc ou asc'
				 * 'parControle' => '[0-9]'
				 * 'parSQL' => array(
				 * 'consulta1' => 'consultar',
				 * 'consulta2' => 'inserir',
				 * 'consulta3' => 'alterar',
				 * 'consulta4' => 'remover')
				 * );
				 *
				 * @access protected
				 * @property array
				 * @name $proDadosCRUD
				 * @var $proDadosCRUD
				 *
				 */
				protected $proDadosCrud;
				/**
				 * propriedade que contera os dados de conexao a base de dados
				 * EX: array('proBanco' => array(
				 * 'parBdTipo' => 'mysql',
				 * 'parBdServidor' => 'www',
				 * 'parBdNome' => 'teste',
				 * 'parBdUsuario' => 'root',
				 * 'parBdSenha' => '123',
				 * 'parBdTabela' => 'teste'))
				 *
				 * @access protected
				 * @property array
				 * @name $proBanco
				 * @var $proBanco
				 *
				 */
				protected $proBanco;
				/**
				 * propriedade que contera a informacao da acao CRUD a ser executada
				 * podendo ser [inserir, alterar, remover, consultar, navegar ou sql].
				 * inseridos em minusculo como acima.
				 *
				 * O valor para esta propriedade e definido no metodo mtdExecutar da classe objRotinaCrud
				 *
				 * @access protected
				 * @property string
				 * @name $proBancoFuncoes
				 * @var $proBancoFuncoes
				 *
				 */
				protected $proBancoFuncoes;
				/**
				 * propriedade que controla e recebe dados de erro
				 * o valor para esta propriedade e definido caso algum metodo retorne erro
				 *
				 * @access protected
				 * @property array
				 * @name $proErros
				 * @var $proErros
				 *
				 */
				protected $proErros;
				/**
				 * propriedade que retornará os dados processados no final da execucao dos metodos e classes
				 *
				 * @access public
				 * @property array
				 * @name $proDados
				 * @var $proDados
				 *
				 */
				public $proDados;
				/**
				 * metodo utilizado para armazenar as propriedades de entrada com encapsulamento das propriedades
				 *
				 * @access public
				 * @method array mtdConfiguracao($parDados)
				 * @param array $parDados
				 * @return array
				 *
				 */
				public function mtdConfiguracao($parDados)
					{
						foreach ($parDados as $parDados['c1'] => $parDados['c2'])
							{
								$this->$parDados['c1'] = $parDados['c2'];
							}
					}
				/**
				 * metodo principal da classe, onde sao enviados os parametros de entrada a serem processados
				 * junto aos metodos especificos de mesmo nome.
				 *
				 * @access private
				 * @method array mtdDados()
				 * @param null
				 * @return array
				 *
				 */
				private function mtdDados()
					{
						if (($this->proBancoFuncoes == 'inserir') || ($this->proBancoFuncoes == 'alterar') || ($this->proBancoFuncoes == 'remover') || ($this->proBancoFuncoes == 'consultar') || ($this->proBancoFuncoes == 'navegar') || ($this->proBancoFuncoes == 'sql'))
							{
								return $this->mtdDadosCrud($this->proDadosCrud);
							}
						else
							{
								return $this->proErros = array('mtdDados' => array('metodo indisponivel' => $this->proBancoFuncoes));
							}
					}
				/**
				 * metodo para controle de erros
				 * preenche a propriedade equivalente de nome proErros
				 *
				 * @access protected
				 * @method array mtdErros($parDados)
				 * @param array $parDados
				 * @return array
				 *
				 */
				protected function mtdErros($parDados)
					{
						$this->proErros = !empty($this->proErros) ? $this->proErros : array('erro' => $parDados);
					}
				/**
				 * metodo que inicia e finaliza a classe
				 * aqui define a acao CRUD na propriedade proBancoFuncoes
				 * tambem avalia se houve erro no tratamento dos dados de entrada
				 *
				 * @access public
				 * @method array mtdExecutar($parDados)
				 * @param array $parDados
				 * @return array
				 *
				 */
				public function mtdExecutar($parDados)
					{
						$this->proBancoFuncoes = $parDados;
						$parDados = $this->mtdDados();
						$this->proDados = empty($this->proErros) ? $parDados : $this->proErros;
						unset($this->proDadosCrud);
						unset($this->proBanco);
						unset($this->proBancoFuncoes);
						unset($this->proErros);
						return $this->proDados;
					}
			}
	}
?>